package org.dxy.trigger.http.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dxy.api.dto.param.CreateParamDefinitionRequest;
import org.dxy.api.dto.param.UpdateParamDefinitionRequest;
import org.dxy.api.response.R;
import org.dxy.infrastructure.entity.ParamDefinitionEntity;

import java.util.List;

/**
 * @description: 参数定义应用服务接口
 * @author: dxy
 * @createTime: 2025/1/21
 */
public interface ParamDefinitionApplicationService {

    /**
     * 创建参数定义
     * @param dto 参数定义创建请求DTO
     * @return 操作结果
     */
    R<Long> create(CreateParamDefinitionRequest dto);

    /**
     * 更新参数定义
     * @param dto 参数定义更新请求DTO
     * @return 操作结果
     */
    R<Void> update(UpdateParamDefinitionRequest dto);

    /**
     * 分页查询参数定义列表
     * @param page 分页参数
     * @param query 查询条件
     * @return 分页的参数定义列表
     */
    R<Page<ParamDefinitionEntity>> list(Page<ParamDefinitionEntity> page, ParamDefinitionEntity query);

    /**
     * 查询参数定义详情
     * @param id 参数定义ID
     * @return 参数定义详情
     */
    R<ParamDefinitionEntity> getById(Long id);

    /**
     * 根据参数编码查询参数定义
     * @param code 参数编码
     * @return 参数定义详情
     */
    R<ParamDefinitionEntity> getByCode(String code);

    /**
     * 获取所有参数定义（用于下拉选择）
     * @return 参数定义列表
     */
    R<List<ParamDefinitionEntity>> getAll();

    /**
     * 根据输入类型查询参数定义
     * @param inputType 输入类型（AUTO_COLLECT/MANUAL_INPUT）
     * @return 参数定义列表
     */
    R<List<ParamDefinitionEntity>> getByInputType(String inputType);

    /**
     * 删除参数定义
     * @param id 参数定义ID
     * @return 操作结果
     */
    R<Void> delete(Long id);

    /**
     * 批量删除参数定义
     * @param ids 参数定义ID列表
     * @return 操作结果
     */
    R<Void> batchDelete(List<Long> ids);
}